package com.link.base.base.accnt.dao.mybatis.mapper;

import com.link.base.base.accnt.model.*;
import com.link.base.base.fund.model.BillDetailModel;
import com.link.core.basic.dao.mapper.BasicMapper;
import com.link.core.basic.query.QueryParams;

import java.util.List;
/**
 * Copyright  hande Company. All Rights Reserved.
 *
 * @author  unknwon
 * @date:   2018/11/7 17:08
 * @version 1.0
 */

public interface AccountMapper extends BasicMapper<Account> {

    /**
     * 客户查询
     *
     * @author jianlongwen
     * @date 2019/03/24
     * @param entity
     */
    public List<Account> selectAccountHierarchy(Account entity);

    /**
     * 新建拜访记录时选择客户
     * @param entity
     * @return
     */
    public List<Account> queryVisitAccountPage(Account entity);

    /**
     * <p>修改主要联系人</p>
     *
     * @author heqiqian
     * @param account
     */
    public void mainContactUpdate(Account account);

    /**
     * 修改主要合同
     * @param account
     */
    public void mainAgrUpdate(Account account);

    /**
     * <p>修改状态</p>
     *
     * @author heqiqian
     * @param account
     */
    public void statusUpdate(Account account);

    /**
     * <p>修改审批状态</p>
     *
     * @author yxl
     * @param account
     */
    public void auditStatusUpdate(Account account);

    /**
     * <p>从客户信息中复制数据到联系人表</p>
     *
     * @author yrf
     * @param account
     */
    public void copyToContactInsert(Account account);

    /**
     * <p>复制数据到业务范围表</p>
     *
     * @author yrf
     * @param account
     */
    public void copyToBsScopeInsert(Account account);

    /**
     * <p>更新联系人数据</p>
     *
     * @author yrf
     * @param account
     */
    public void copyToContactUpdate(Account account);

    /**
     * <p>更新客户头信息</p>
     *
     * @author yrf
     * @param account
     */
    public void acctHeaderUpdate(Account account);

    /**
     * <p>更新客户详细信息</p>
     *
     * @author yrf
     * @param account
     */
    public void acctDetailUpdate(Account account);

    /**
     * 更新主要资金账户
     * @Auth HuanglJ
     * @param account
     * @param account 客户Id，资金账户Id
     */
    public void mainBillUpdate(Account account);

    /**
     * <p>更新dms公司信息</p>
     *
     * @param account
     */
    public void updateDmsCompany(Account account);

    /**
     * <p>查找非子客户及本身</p>
     *
     * @param account
     * @return
     */
    public List<Account> queryAccountListRemoveIdAndChildrenPage(Account account);

    /**
     * 查找非子客户及本身
     * @param str
     * @return
     * @throws Exception
     */
    public List<Account> queryAccountListRemoveIdAndChildrenPage(String str) throws Exception;

    /**
     * 根据当前客户查根客户
     * @param entity
     * @return
     * @throws Exception
     */
    public Account queryRoot(Account entity) throws Exception;

    /**
     * 根据当前客户查所有子客户
     * @param entity
     * @return
     * @throws Exception
     */
    public List<Account> queryChildTreeList(Account entity) throws Exception;
    /**
     * 根据当前客户查所有子客户
     * @param str
     * @return
     * @throws Exception
     */

    public List<Account> queryChildTreeList(String str) throws Exception;

    /**
     * 根据当前客户查所有子客户
     * @param qps
     * @return
     * @throws Exception
     */
    public List<Account> queryChildTreeList(QueryParams qps) throws Exception;

    /**
     * 查询区域客户情况
     * @param entity
     * @return list
     * @throws Exception
     */
    public List<Account> queryAccountOfDistrictPage(Account entity) throws Exception;

    /**
     * 子
     * @param c
     * @return
     * @throws Exception
     */
    public String getChildStr(Account c) throws Exception;

    /**
     * 客户列表
     * @param t
     * @return
     */
    public List<Account> getAccountList(Account t);

    /**
     * 查询指定条件下的客户
     *
     * @param account
     * @return Accounts
     * @throws Exception
     */
    public List<Account> queryAllByAccntStatus(Account account) throws Exception;

    /***
     * 查询符合生成对账单的客户
     * @param billDetailModel
     * @return BillDetailModels
     * @throws Exception
     */
    public List<BillDetailModel> queryAllBillAccntByCondtion(BillDetailModel billDetailModel) throws Exception;
    /**
     * 查询导购姓名列表
     * @author : LiQun
     * @param account
     * @return 导购姓名list
     * @throws Exception
     * @date : 下午3:06 2018/7/27
     */

    public List<String> queryGuideList(Account account) throws Exception;

    /**
     *  新建客户-标签关系 CRM
     * @param qao
     * @throws Exception
     */
    public void accntTagInsert(TagItem qao) throws Exception;
    /**
     *  查询客户标签
     * @param record
     * @return
     * @throws Exception
     */

    List<TagItem> queryAccountTags(TagItem record) throws Exception;

    /**
     * 更新客户-标签关系 CRM
     * @param qao
     * @throws Exception
     */
    public void accntTagUpdate(TagItem qao) throws Exception;
    /**
     *  删除客户标签关系 根据rowid(中间表的rowid) 企点
     * @param tiDb
     * @throws Exception
     */

    public void deleteAccnt8TagById(TagItem tiDb) throws Exception;

    /**
     *  查询企点客户的状态数据
     * @author lizt
     * @param entity
     * @return
     * @throws Exception
     * @date 2017年5月18日
     */
    public List<TagItem> queryQdAccntTags(TagItem entity) throws Exception;

    /**
     * 查询企点客户的状态数据
     * @param entity
     * @return
     * @throws Exception
     */
    public List<TagItem> queryQdAccntTagGroups(TagGroup entity) throws Exception;

    /**
     * 插入中间表
     *
     * @author : LiQun
     * @param entity 客户-识别顾客中间表对象
     * @throws Exception 异常信息
     * @date : 下午3:57 2018/5/7
     */
    public void accountPersonInsert(AccountPerson entity) throws Exception;

    /**
     * 根据客户id及person查询客户是否存在
     * @author : LiQun
     * @param entity
     * @return
     * @throws Exception
     * @date : 下午5:44 2018/5/11
     */
    public int queryAccountPersonById(AccountPerson entity) throws Exception;
    /**
     * 获取一个8位数的数字
     * @return
     * @throws Exception
     */

    public String get8NumFromSeq() throws Exception;

    /**
     * 清空客户微信seq
     *
     * @param record
     * @throws Exception
     */
    public void emptyAccntSeqUpdate(Account record) throws Exception;

    /**
     * 查询微信关注者
     *
     * @param entity
     * @return Accounts
     * @throws Exception
     */
    public List<Account> queryByWeixinPage(Account entity) throws Exception;

    /**
     * 根据手机号查询微信客户
     *
     * @param entity
     * @return Accounts
     * @throws Exception
     */
    public List<Account> queryWeixinByMobilePhone(Account entity) throws Exception;

    /**
     * 查询客户根据wxopenid
     * @param entity
     * @return
     * @throws Exception
     */
    public Account queryByWxOpenId(Account entity) throws Exception;

    /**
     * 查询客户根据wxopenid，客户来源
     * @param entity
     * @return
     * @throws Exception
     */
    public Account queryByMpOpenId(Account entity) throws Exception;

    /**
     *  查询客户根据微信8位码-企点
     * @param entity
     * @return
     * @throws Exception
     */
    public Account queryByWxSeq(Account entity) throws Exception;


    //***************微信相关 start***************
    /**
     *  查询客户简单信息 根据wxopenid
     * @param entity
     * @return
     * @throws Exception
     */
    public Account querySimpleAccntByWxOpenId(Account entity) throws Exception;

    /**
     * 将8位数写入到数据库中
     * @param record
     * @throws Exception
     */
    public void wx2codeUpdate(Account record) throws Exception;


    /**
     * 根据客户wx唯一seq回写wxopenid
     * @param qdAccnt
     * @throws Exception
     */
    public void updateWxOpenIdBySeq(Account qdAccnt) throws Exception;


    /**
     * 查询客户头像url
     * @param record
     * @return
     * @throws Exception
     */
    public Account queryHeadIconUrl(Account record) throws Exception;

    /**
     * 更新客户-来源微信
     * @param accntQD
     * @throws Exception
     */
    public void updateFromWx(Account accntQD) throws Exception;

    /**
     * 根据客户id回写wxopenid和微信seq(最后一次关注者)
     * @param entity
     * @throws Exception
     */
    public void updateWxOpenIdAndSeqByRowId(Account entity) throws Exception;

    /**
     * 扫描微信公众号时新建客户
     *
     * @param entity
     * @throws Exception
     */
    public void wxAccountInsertByInterface(Account entity) throws Exception;

    /**
     * 将微信客户关联门店客户
     * 更新门店客户的wxOwnOpenId 及 wxAccountId
     * @param entity
     * @throws Exception
     */
    public void accountWxOwnOpenIdUpdate(Account entity) throws Exception;

    /**
     * 通过qdOpenId获取客户row_id 和 客户主要地址Id
     * @Author HuangLJ
     * @param account
     * @return
     * @throws Exception
     * @Date 2017-06-09
     */
    public Account queryAccntMsgByOpenId(Account account) throws Exception;

    //***************微信相关 end****************


    /******************小程序 Start***************************/
    /**
     * 根据openId查询消费者信息
     * @author Lizt
     * @param account
     * @return
     * @throws Exception
     * @date 2018/7/26
     */
    Account queryConsumerByOpenId(Account account) throws  Exception;

    /**
     * 插入消费者信息
     * @param account
     * @throws Exception
     */
    void addConsumer(Account account) throws  Exception;

    /**
     *  更新消费者信息
     *  @author Lizt
     * @param account
     * @throws Exception
     * @date 2018/7/31
     */
    void modifyConsumer(Account account) throws  Exception;

    /**
     * 小程序获取到手机号码后更新消费者手机号码信息
     *
     * @author KuangRuifeng
     * @date 2018/12/18
     * @param account 要更新的数据
     * @throws Exception 异常信息
     */
    void updMobilePhoneInfo(Account account) throws Exception;

    /******************小程序 End*******************************/



    /**
     * 新增客户信息（未登录）
     * @param entity
     * @throws Exception
     */
    public void accountInsertByInterface(Account entity) throws Exception;

    /**
     * 修改客户信息（未登录）
     * @param entity
     * @throws Exception
     */
    public void accountUpdateByInterface(Account entity) throws Exception;

    /**
     *  查询满足发送图文条件的客户
     * @param account
     * @return
     * @throws Exception
     */
    List<Account> queryAccountListByExamplePage(Account account) throws Exception;

    /**
     * 查询小程序门店
     * @param temp
     * @return
     * @throws Exception
     */
    List<Account> queryMpStoreByExamplePage(Account temp) throws Exception;

    /**
     * 根据personLinkId查询客户列表
     * @author LiQun
     * @date 2018/12/6
     * @param accountPerson 客户-人物中间表对象 personId 人的linkId
     * @return 客户列表
     * @throws Exception 异常信息
     */
    Account queryAccountByPersonId(AccountPerson accountPerson) throws Exception;

    /**
     * 根据personLinkId查询客户列表
     * @author LiQun
     * @date 2018/12/6
     * @param list 客户-人物中间表对象 personId 人的linkId
     * @return 客户列表
     * @throws Exception 异常信息
     */
    List<Account> queryAccountByPersonIdList(List<AccountPerson> list) throws Exception;

    /**
     * 查询访客信息
     * @author 路江
     * @param entity
     * @return
     * @throws Exception
     */
    Account queryAcctAndMember(Account entity) throws Exception;

    /**
     * 修改消费者是否取消短信服务标识
     *
     * @author lujiang
     * @date 2019-04-04
     * @param entity 消费者对象
     * @throws Exception
     */
    public void updateUnSubSms(Account entity) throws Exception;

    /**
     * 修改消費者信息
     *
     * @author zengchi
     * @date 2019-09-26
     * @param entity 消费者对象
     * @throws Exception
     */
    void updateConsumer(Account entity) throws Exception;

    /**
     * 查询消费者
     *
     * @author zengchi
     * @date 2019-09-30
     * @param id 消费者id
     * @throws Exception
     */
    Account queryConsumerById(Long id) throws Exception;


    /**
     * 微信更新消费者
     *
     * @author huanglongjian
     * @date 2019-10-22 14:19
     */
    void wxUpdateAccount(Account account) throws Exception;

    void auditUpdate(Account account) throws Exception;

    public List<Account> queryAccountListByAcctChange(Account entity) throws Exception;

    void accountChangeAppr(AcctChange acctChange);

    void acctCodeUpdate(Account entity);
}
